/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sofia.Persistencia.Managers;

import Principal.MainSofia;
import java.util.List;
import javax.persistence.EntityExistsException;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;
import javax.persistence.RollbackException;
import sofia.LogicaNegocio.Secretaria;
import sofia.Persistencia.Entidades.ESecretaria;

/**
 *
 * @author Administrador
 */
public class MSecretaria {

        @PersistenceUnit
        private EntityManagerFactory managerFactory;
        private EntityManager entityManager;

        public MSecretaria() {
                managerFactory = MainSofia.managerFactory;
                entityManager = managerFactory.createEntityManager();
        }

        public void crearSecretaria( final Secretaria objSecretaria ) throws RollbackException, EntityExistsException {
                entityManager.clear();
                ESecretaria entidadSecretaria = new ESecretaria();
                entidadSecretaria.setIdSecretaria( objSecretaria.getLogin() );
                entidadSecretaria.setNombre( objSecretaria.getNombre() );
                entidadSecretaria.setCedula( objSecretaria.getCedula() );
                entidadSecretaria.setTelefono( objSecretaria.getTelefono() );
                entidadSecretaria.setEmail( objSecretaria.getEmail() );

                //persiste el objeto en la entidad
                EntityTransaction transaccion = entityManager.getTransaction();
                try {
                        transaccion.begin();
                        entityManager.persist( entidadSecretaria );
                }
                catch (EntityExistsException ex) {
                        throw ex;
                }
                finally {
                        transaccion.commit();
                }
                entityManager.clear();
        }

        public void actualizarSecretaria( final String idSecre , final Secretaria secretaria ) {
                entityManager.clear();
                ESecretaria entidadSecretaria;
                EntityTransaction transaccion = entityManager.getTransaction();
                transaccion.begin();
                entidadSecretaria = entityManager.find( ESecretaria.class , idSecre );
                transaccion.commit();
                if( entidadSecretaria != null ) {
//                        la llave es unica no puede ser cambiada
//                        entidadFisioterapeuta.setIdLogin( fisioterapeuta.getLogin() );
                        entidadSecretaria.setNombre( secretaria.getNombre() );
                        entidadSecretaria.setCedula( secretaria.getCedula() );
                        entidadSecretaria.setTelefono( secretaria.getTelefono() );
                        entidadSecretaria.setEmail( secretaria.getEmail() );

                        transaccion.begin();
                        entityManager.merge( entidadSecretaria );
                        transaccion.commit();
                }
                entityManager.clear();
        }

        public void eliminarSecretaria( final int idSecre ) {
                entityManager.clear();
                ESecretaria entidadSecretaria;
                EntityTransaction transaccion = entityManager.getTransaction();
                transaccion.begin();
                entidadSecretaria = entityManager.find( ESecretaria.class , idSecre );
                entityManager.remove( entidadSecretaria );
                transaccion.commit();
                entityManager.clear();
        }

        public Secretaria obtenerSecretaria( final String idSecre ) {
                entityManager.clear();
                ESecretaria entidadSecretaria;
                Secretaria secretaria = null;
                EntityTransaction transaccion = entityManager.getTransaction();
                transaccion.begin();
                entidadSecretaria = entityManager.find( ESecretaria.class , idSecre );
                transaccion.commit();
                if( entidadSecretaria != null ) {
                        secretaria = new Secretaria();
                        secretaria.setCedula( entidadSecretaria.getCedula() );
                        secretaria.setEmail( entidadSecretaria.getEmail() );
                        secretaria.setNombre( entidadSecretaria.getNombre() );
                        secretaria.setTelefono( entidadSecretaria.getTelefono() );
                        secretaria.setLogin( entidadSecretaria.getIdSecretaria() );
                }
                entityManager.clear();
                return secretaria;
        }

        public List obtenerSecretariasRegistradas() {
                entityManager.clear();
                EntityTransaction transaccion = entityManager.getTransaction();
                transaccion.begin();
                List secretarias = null;
                Query query = entityManager.createQuery( "SELECT eSecretaria FROM ESecretaria eSecretaria" );
                secretarias = query.getResultList();
                transaccion.commit();
                if( !secretarias.isEmpty() ) {
                        System.out.println( "Leyendo " + secretarias.size() + " Fisioterapeutas" );

                }
                entityManager.clear();
                return secretarias;
        }

}
